package br.com.velp.sudecap.entidade;

import br.com.velp.sudecap.hibernate.intercept.Auditable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 16.12.2013 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <descricao> Bean Responsável Pelo Mapeamento da Tabela DOCUMENTO </descricao>
 * </sumario>
 */
@Entity
@Table(name = "TB_DOCUMENTO")
@Auditable(logTableName = "TB_DOCUMENTO_LOG")
public class Documento extends EntityBase {
    
    public static final Long serialVersionUID = 1L;
    
    @Id
    @SequenceGenerator(name = "SQ_ID_DOCUMENTO", sequenceName = "SQ_ID_DOCUMENTO", allocationSize = 1)
    @GeneratedValue(generator = "SQ_ID_DOCUMENTO")
    @Column(name = "ID_DOCUMENTO", nullable = false, unique = true)                                    
    private Long id;
    
    @Column(name = "USUARIO_CADASTRO", nullable = false)                                    
    private Long idUsuarioCadastro;
    
    @Column(name = "USUARIO_ALTERACAO")                                    
    private Long idUsuarioAlteracao;
    
    @Column(name = "TITULO", length = 250)                                    
    private String titulo;
    
    @Column(name = "TITULO_PARALELO", length = 50)                                    
    private String tituloParalelo;
    
    @Column(name = "NUMERO_SUDECAP", length = 50)                                    
    private String numeroSudecap;
    
    @Column(name = "DESCRICAO", length = 4000)                                    
    private String descricao;
    
    @Column(name = "INFORMACOES", length = 4000)                                    
    private String informacoes;
    
    @Column(name = "LOCALIZACAO_ELETRONICA", length = 150)                                    
    private String localizacaoEletronica;
    
    @Column(name = "ANDAR", length = 15)                                    
    private String andar;
    
    @Column(name = "CORREDOR", length = 15)                                    
    private String corredor;
    
    @Column(name = "NIVEL", length = 15)                                    
    private String nivel;
    
    @Column(name = "PRATELEIRA", length = 15)                                    
    private String prateleira;
    
    @Column(name = "PASTA", length = 15)                                    
    private String pasta;
    
    @Column(name = "CAIXA", length = 15)                                    
    private String caixa;
    
    @Column(name = "GAVETA", length = 15)                                    
    private String gaveta;
    
    @Column(name = "STATUS", length = 1)                                    
    private String status;
    
    @Column(name = "SITUACAO", length = 1)                                    
    private String situacao;
    
    @Column(name = "PALAVRAS", length = 4000)                                    
    private String palavras;
    
    @Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "DATA_PUBLICACAO")                                    
    private Date dataPublicacao;
    
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    @Column(name = "DATA_CADASTRO", nullable = false)                                    
    private Date dataCadastro;
    
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    @Column(name = "DATA_ALTERACAO")                                    
    private Date dataAlteracao;
    
    @Fetch(FetchMode.SELECT)
    @ManyToOne()
    @JoinColumn(name = "ID_ASSUNTO")
    private Assunto assunto;
    
    @Fetch(FetchMode.SELECT)
    @ManyToOne()
    @JoinColumn(name = "ID_CATEGORIA")
    private Categoria categoria;
    
    @Fetch(FetchMode.SELECT)
    @ManyToOne()
    @JoinColumn(name = "ID_TIPO_DOCUMENTO")
    private TipoDocumento tipoDocumento;
    
    @Fetch(FetchMode.SELECT)
    @ManyToOne()
    @JoinColumn(name = "ID_FORMATO")
    private Formato formato;
    
    @Fetch(FetchMode.SELECT)
    @ManyToOne()
    @JoinColumn(name = "ID_LOCAL_ACERVO")
    private LocalAcervo localAcervo;

    public Documento() {
    }

    public Documento(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getIdUsuarioCadastro() {
        return idUsuarioCadastro;
    }

    public void setIdUsuarioCadastro(Long idUsuarioCadastro) {
        this.idUsuarioCadastro = idUsuarioCadastro;
    }

    public Long getIdUsuarioAlteracao() {
        return idUsuarioAlteracao;
    }

    public void setIdUsuarioAlteracao(Long idUsuarioAlteracao) {
        this.idUsuarioAlteracao = idUsuarioAlteracao;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getTituloParalelo() {
        return tituloParalelo;
    }

    public void setTituloParalelo(String tituloParalelo) {
        this.tituloParalelo = tituloParalelo;
    }

    public String getNumeroSudecap() {
        return numeroSudecap;
    }

    public void setNumeroSudecap(String numeroSudecap) {
        this.numeroSudecap = numeroSudecap;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getInformacoes() {
        return informacoes;
    }

    public void setInformacoes(String informacoes) {
        this.informacoes = informacoes;
    }

    public String getLocalizacaoEletronica() {
        return localizacaoEletronica;
    }

    public void setLocalizacaoEletronica(String localizacaoEletronica) {
        this.localizacaoEletronica = localizacaoEletronica;
    }

    public String getAndar() {
        return andar;
    }

    public void setAndar(String andar) {
        this.andar = andar;
    }

    public String getCorredor() {
        return corredor;
    }

    public void setCorredor(String corredor) {
        this.corredor = corredor;
    }

    public String getNivel() {
        return nivel;
    }

    public void setNivel(String nivel) {
        this.nivel = nivel;
    }

    public String getPrateleira() {
        return prateleira;
    }

    public void setPrateleira(String prateleira) {
        this.prateleira = prateleira;
    }

    public String getPasta() {
        return pasta;
    }

    public void setPasta(String pasta) {
        this.pasta = pasta;
    }

    public String getCaixa() {
        return caixa;
    }

    public void setCaixa(String caixa) {
        this.caixa = caixa;
    }

    public String getGaveta() {
        return gaveta;
    }

    public void setGaveta(String gaveta) {
        this.gaveta = gaveta;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getSituacao() {
        return situacao;
    }

    public void setSituacao(String situacao) {
        this.situacao = situacao;
    }

    public String getPalavras() {
        return palavras;
    }

    public void setPalavras(String palavras) {
        this.palavras = palavras;
    }

    public Date getDataPublicacao() {
        return dataPublicacao;
    }

    public void setDataPublicacao(Date dataPublicacao) {
        this.dataPublicacao = dataPublicacao;
    }

    public Date getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(Date dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public Date getDataAlteracao() {
        return dataAlteracao;
    }

    public void setDataAlteracao(Date dataAlteracao) {
        this.dataAlteracao = dataAlteracao;
    }

    public Assunto getAssunto() {
        return assunto;
    }

    public void setAssunto(Assunto assunto) {
        this.assunto = assunto;
    }

    public Categoria getCategoria() {
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }

    public TipoDocumento getTipoDocumento() {
        return tipoDocumento;
    }

    public void setTipoDocumento(TipoDocumento tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }

    public Formato getFormato() {
        return formato;
    }

    public void setFormato(Formato formato) {
        this.formato = formato;
    }

    public LocalAcervo getLocalAcervo() {
        return localAcervo;
    }

    public void setLocalAcervo(LocalAcervo localAcervo) {
        this.localAcervo = localAcervo;
    }
    
}
